package GrabRedPacket;

public class GrabRedPacket implements Runnable {
    private int redPackets = 3; // 红包总数

    @Override
    public void run() {
        while (true) {
            synchronized (this) {
                if (redPackets > 0) {
                    redPackets--; // 红包总数量减一
                    System.out.println(Thread.currentThread().getName() + "，恭喜你成功抢到一个20元的红包");
                    try {
                        Thread.sleep(100); // 模拟抢红包的时间
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    break; // 抢到红包后退出循环
                } else {
                    System.out.println(Thread.currentThread().getName() + "，抱歉，红包已经被抢完了");
                    break; // 红包抢完后退出循环
                }
//            if (redPackets > 0) {
//                try {
//                    Thread.sleep(1000); // 模拟抢红包的时间
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
                // Thread.sleep(1000) 被放置在了 synchronized 块之外，
                // 并且只在 redPackets > 0 的条件下执行。
                // 然而，一旦线程进入 synchronized 块并发现 redPackets > 0，它就会执行抢红包的逻辑，
                // 随后 break 语句会立即退出循环。这意味着一旦线程成功抢到红包，它将不会执行

            }
        }
    }
}